home *** CD-ROM | disk | FTP | other *** search
- ;***************************************************************
- ; *
- ; DeciGEL (Relief from MC68010 pains on the Amiga) *
- ; *
- ; Copyright 1986 by Scott Turner *
- ; Program may be copied and used for non-commercial uses only. *
- ; Requests for commercial use should be directed to: *
- ; *
- ; Scott Turner *
- ; 12311 Maplewood Avenue *
- ; Edmonds, Wa 98020-1115 *
- ; *
- ; Execute file to install patch. May be executed over and over *
- ; again. You lose about 40 bytes of memory each time you *
- ; execute it though. Reboot your AMiga (Ctrl-Amiga-AMiga) to *
- ; remove the patch. *
- ; *
- ; EXECUTE DeciGEL.make *
- ; Assembles and links a new DeciGEL *
- ; Program should work with MC68000/MC68008/MC68012/MC68020 *
- ; as well (ie. it won't die on MC68000/MC68008). *
- ;***************************************************************
-
- ; Some handy constants
- SysBase EQU 4
- AlcMem EQU -6*33
- PrivVect EQU $20 ; Address of Privlege error vector
-
- Main movea.l SysBase,A6
- move.l CodeSize,D0
- moveq #0,D1 ; PUBLIC
- jsr AlcMem(A6) ; Get the memory
- tst.l D0 ; Did we get it?
- bne.s GotIt
- moveq #100,D0 ; Return Error # 100
- rts ; Back to AmigaDOS with error
-
- GotIt move.l D0,A0 ; Move to work reg
- move.l D0,A2 ; Save copy for patching vector
- lea MoveMe,A1 ; Get address of our code
- move.l CodeSize,D0 ; Number of bytes to move
- subq.l #5,D0 ; Correct for DBF and one long word
- Loop move.b (A1)+,(A0)+ ; Move byte
- dbf D0,Loop
- move.l PrivVect,(A0)+ ; Patch opcode at end
- move.l A2,PrivVect ; Patch us into the vector
- moveq #0,D0 ; Good return code
- rts ; Back to AmigaDOS, no error
-
- MoveMe movem.l D0/A0,-(SP) ; Save registers
- move.l 8+2(SP),A0 ; Pointer to opcode
- move.w (A0),D0 ; Pickup opcode
- andi.w #~%111111,D0 ; Mask out EA field
- cmpi.w #$40C0,D0 ; Is it a MOVE SR,ea?
- bne.s NotOne
- bset #1,(A0) ; Convert it to MOVE CCR,ea
- movem.l (SP)+,D0/A0 ; Restore regs
- rte ; Rerun new opcode
-
- NotOne movem.l (SP)+,D0/A0 ; Restore regs
- jmp $FC0000 ; To previous handler, patched on
- ; installation of this routine
- CodeEnd
- CodeSize DC.L CodeEnd-MoveMe ; Size of routine
- end
-
-